#ifndef __IMESH_H__
#define __IMESH_H__

#include <string>
#include "MeshDefs.h"
#include "IBoundingVolume.h"
#include "IMeshBuffer.h"
#include "IMaterial.h"

namespace steam
{
	namespace coal
	{
		class IMesh
		{
		public:

			// virtual destructor
			virtual ~IMesh() {}
			
			// get vertex data
			virtual const VertexVector& getVertices() const = 0;
			
			// get normal data
			virtual const NormalVector& getNormals() const = 0;
			
			// get texture coordinate data
			virtual const TexCoordVector& getTexCoords() const = 0;

			// get all materials
			virtual const MaterialVector& getMaterials() const = 0;

			// get material
			virtual const IMaterial* getMaterialByName(std::string name) const = 0;
			
			// get mesh buffer count
			virtual unsigned int getMeshBufferCount() const = 0;
			
			// get mesh buffer by index
			virtual const IMeshBuffer* getMeshBuffer(unsigned int index) const = 0;
			
			// get mesh name
			virtual std::string getMeshName() const = 0;

			// get bounding volume
			virtual const base::IBoundingVolume* getBoundingVolume() const = 0;

		};
	}

}

#endif